package com.solr.self.search;

import java.net.MalformedURLException;

import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;

/**
 * 
 * <一句话功能简述>
 * <功能详细描述>
 * 
 * @author  huanglizhi
 * @version  [版本号, 2012-7-3]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class SolrServer {

//	private static SolrServer solrServer = null;
    private static CommonsHttpSolrServer server=null;
    private static String url="http://localhost:7080/solrTest/core1";
//    private static String url="http://localhost:7080/solrTest/core0";
//    private static String url="http://localhost:8080/solr";
   
//    public static synchronized SolrServer getInstance() {
//        if (solrServer==null){
//           solrServer=new SolrServer();
//        }
//        return solrServer;
//    }
    public static CommonsHttpSolrServer getServer(){
         try {
            if(server==null){
              server = new CommonsHttpSolrServer(url);
              server.setSoTimeout(1000);  // socket read timeout
              server.setConnectionTimeout(1000);
              server.setDefaultMaxConnectionsPerHost(100);
              server.setMaxTotalConnections(100);
              server.setFollowRedirects(false);  // defaults to false
              //allowCompression defaults to false.
              //Server side must support gzip or deflate for this to have any effect.
              server.setAllowCompression(true);
              server.setMaxRetries(1); // defaults to 0.  > 1 not recommended.
            }
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return server;
    }
    
//    Read timed out异常出现的原因一般有2个： 
//    1.请求太多，服务器接受不了这么多的请求 
//    2.服务器处理太慢，超过了client设置的超时时间 
//
//    你说的“并发很低”，具体是多少？建议你开启jmx，然后用jconsole监视一下jvm的活动线程数是多少。如果被限制在了10-20之间，可能就是这个原因了： 
//    accept-thread-max 10 
//
//    我没用过resin，参考了一个链接：http://hi.baidu.com/mygia/blog/item/329ed813b24a0d065baf53f0.html 
//    里边设置的accept-thread-max都是一个比较大的值，类似于tomcat中的maxThreads。这个值决定了服务器能处理多少进程。我建议调整这个值（比如200）在测试机压力测试一下，应该没什么问题。 
//
//    之前上线系统就遇到了因为maxThreads调的太低造成的问题。当时设置为500，查询到jvm的活动线程数已经到了560，然后tomcat挂了。后来调整到1000，并发800线程相安无事。

}
